/*! Distpicker v2.0.8 | (c) 2014-present Chen Fengyuan | MIT */
(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :
    typeof define === 'function' && define.amd ? define(['jquery'], factory) :
    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jQuery));
  })(this, (function ($) { 'use strict';
  
    function _classCallCheck(instance, Constructor) {
      if (!(instance instanceof Constructor)) {
        throw new TypeError("Cannot call a class as a function");
      }
    }
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        if ("value" in descriptor) descriptor.writable = true;
        Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
      if (staticProps) _defineProperties(Constructor, staticProps);
      Object.defineProperty(Constructor, "prototype", {
        writable: false
      });
      return Constructor;
    }
    function _toPrimitive(input, hint) {
      if (typeof input !== "object" || input === null) return input;
      var prim = input[Symbol.toPrimitive];
      if (prim !== undefined) {
        var res = prim.call(input, hint || "default");
        if (typeof res !== "object") return res;
        throw new TypeError("@@toPrimitive must return a primitive value.");
      }
      return (hint === "string" ? String : Number)(input);
    }
    function _toPropertyKey(arg) {
      var key = _toPrimitive(arg, "string");
      return typeof key === "symbol" ? key : String(key);
    }
  
    var DEFAULTS = {
      // Selects the districts automatically.
      // 0 -> Disable autoselect
      // 1 -> Autoselect province only
      // 2 -> Autoselect province and city only
      // 3 -> Autoselect all (province, city and district)
      autoselect: 0,
      // Show placeholder.
      placeholder: true,
      // Select value. Options: 'name' and 'code'
      valueType: 'name',
      // Defines the initial value of province.
      province: '—— ئۆلكە ——',
      // Defines the initial value of city.
      city: '—— شەھەر ——',
      // Defines the initial value of district.
      district: '—— رايون/ناھىيە ——'
    };
  
    var DISTRICTS = {
      100000: {
        650000: 'شىنجاڭ ئۇيغۇر ئاپتونۇم رايونى',
      },
      650000: {
        650100: 'ئۈرۈمچى شەھىرى',
        650200: 'قاراماي شەھىرى',
        650400: 'تۇرپان ۋىلايىتى',
        650500: 'قۇمۇل ۋىلايىتى',
        652300: 'سانجى خۇيزۇ ئاپتونوم ئوبلاستى',
        652700: 'بۆرتالا موڭغۇل ئاپتونوم ئوبلاستى',
        652800: 'بايىنغۇلىن موڭغۇل ئاپتونوم ئوبلاستى',
        652900: 'ئاقسۇ ۋىلايىتى',
        653000: 'قىزىلسۇ قىرغىز ئاپتونوم ئوبلاستى',
        653100: 'قەشقەر ۋىلايىتى',
        653200: 'خوتەن ۋىلايىتى',
        654000: 'ئىلى قازاق ئاپتونوم ئوبلاستى',
        654200: 'تارباغاتاي ۋىلايىتى',
        654300: 'ئالتاي ۋىلايىتى',
        659001: 'شىخەنزە شەھىرى',
        659002: 'ئالار شەھىرى',
        659003: 'تۇمشۇق شەھىرى',
        659004: 'ۋۇجياچۈ شەھىرى',
        659005: '北屯市',
        659006: 'باشئەگىم شەھىرى',
        659007: '双河市',
        659008: 'كۆكدالا شەھىرى',
        659009: '昆玉市',
        659010: '胡杨河市',
        659011: '新星市'
      },
      650100: {
        650102: 'تىيانشان رايونى',
        650103: 'سايباغ رايونى',
        650104: 'يېڭىشەھەر رايونى',
        650105: 'شىمىگو رايونى',
        650106: 'تۇدۇڭخابا رايونى',
        650107: 'داۋانچىڭ رايونى',
        650109: 'مىچۈەن-كۆكتاغ رايونى',
        650121: 'ئۈرۈمچى ناھىيەسى'
      },
      650200: {
        650202: 'مايتاغ رايونى',
        650203: 'قاراماي رايونى',
        650204: 'جەرەنبۇلاق رايونى',
        650205: 'ئورقۇ رايونى'
      },
      650400: {
        650402: 'تۇرپان شەھىرى',
        650421: 'پىچان ناھىيەسى',
        650422: 'توقسۇن ناھىيەسى'
      },
      650500: {
        650502: 'قۇمۇل شەھىرى',
        650521: 'بارىكۆل قازاق ئاپتونوم ناھىيەسى',
        650522: 'ئاراتۈرك ناھىيەسى'
      },
      652300: {
        652301: 'سانجى شەھىرى',
        652302: 'فۇكاڭ شەھىرى',
        652323: 'قۇتۇبى ناھىيەسى',
        652324: 'ماناس ناھىيەسى',
        652325: 'گۇچۇڭ ناھىيەسى',
        652327: 'جىمىسار ناھىيەسى',
        652328: 'مورى قازاق ئاپتونوم ناھىيەسى'
      },
      652700: {
        652701: 'بۆرتالا شەھىرى',
        652702: 'ئالاتاۋ شەھىرى',
        652722: 'جىڭ ناھىيەسى',
        652723: 'ئارىشاڭ ناھىيەسى'
      },
      652800: {
        652801: 'كورلا شەھىرى',
        652822: 'بۈگۈر ناھىيەسى',
        652823: 'لوپنۇر ناھىيەسى',
        652824: 'چاقىلىق ناھىيەسى',
        652825: 'چەرچەن ناھىيەسى',
        652826: 'يەنجى خۇيزۇ ئاپتونوم ناھىيەسى',
        652827: 'خېجىڭ ناھىيەسى',
        652828: 'خوشۇت ناھىيەسى',
        652829: 'باغراش ناھىيەسى'
      },
      652900: {
        652901: 'ئاقسۇ شەھىرى',
        652902: 'كۇچا شەھىرى',
        652922: 'ئونسۇ ناھىيەسى',
        652924: 'شايار ناھىيەسى',
        652925: 'توقسۇ ناھىيەسى',
        652926: 'باي ناھىيەسى',
        652927: 'ئۈچتۇرپان ناھىيەسى',
        652928: 'ئاۋات ناھىيەسى',
        652929: 'كەلپىن ناھىيەسى'
      },
      653000: {
        653001: 'ئاتۇش شەھىرى',
        653022: 'ئاقتۇ شەھىرى',
        653023: 'ئاقچى ناھىيەسى',
        653024: 'ئۇلۇغچات ناھىيەسى'
      },
      653100: {
        653101: 'قەشقەر شەھىرى',
        653121: 'كوناشەھەر ناھىيسى',
        653122: 'يېڭىشەھەر ناھىيەسى',
        653123: 'يېڭىسار ناھىيەسى',
        653124: 'پوسكام ناھىيەسى',
        653125: 'يەكەن ناھىيەسى',
        653126: 'قاغىلىق ناھىيەسى',
        653127: 'مەكىت ناھىيەسى',
        653128: 'يوپۇرغا ناھىيەسى',
        653129: 'پەيزىۋات ناھىيەسى',
        653130: 'مارالبېشى ناھىيەسى',
        653131: 'تاشقورغان تاجىك ئاپتونوم ناھىيەسى'
      },
      653200: {
        653201: 'خوتەن شەھىرى',
        653221: 'خوتەن ناھىيەسى',
        653222: 'قاراقاش ناھىيەسى',
        653223: 'گۇما ناھىيەسى',
        653224: 'لوپ ناھىيەسى',
        653225: 'چىرا ناھىيەسى',
        653226: 'كېرىيە ناھىيەسى',
        653227: 'نىيە ناھىيەسى'
      },
      654000: {
        654002: 'غۇلجا شەھىرى',
        654003: 'كۈيتۇن شەھىرى',
        654004: 'قورغاس شەھىرى',
        654021: 'غۇلجا ناھىيەسى',
        654022: 'چاپچال شىبە ئاپتونوم يېزىسى',
        654023: 'قورغاس ناھىيەسى',
        654024: 'توققۇزتارا ناھىيەسى',
        654025: 'كۈنەس ناھىيەسى',
        654026: 'موڭغۇلكۈرە ناھىيەسى',
        654027: 'تېكەس ناھىيەسى',
        654028: 'نىلقا ناھىيەسى'
      },
      654200: {
        654201: 'چۆچەك شەھىرى',
        654202: 'شىخۇ شەھىرى',
        654203: 'ساۋەن شەھىرى',
        654221: 'دۆربىلجىن ناھىيەسى',
        654224: 'تولى ناھىيەسى',
        654225: 'چاغانتوقاي ناھىيەسى',
        654226: 'قوبۇقسار موڭغۇل ئاپتونوم ناھىيەسى'
      },
      654300: {
        654301: 'ئالتاي شەھىرى',
        654321: 'بۇرچىن ناھىيەسى',
        654322: 'كۆكتوقاي ناھىيەسى',
        654323: 'بۇرۇلتوقاي ناھىيەسى',
        654324: 'قابا ناھىيەسى',
        654325: 'چىڭگىل ناھىيەسى',
        654326: 'جېمىنەي ناھىيەسى'
      },
      659001: {
        659001: 'شىخەنزە شەھەرە'
      },
      659002: {
        659002: 'ئالار شەھىرى'
      },
      659003: {
        659003: 'تۇمشۇق شەھىرى'
      },
      659004: {
        659004: 'ۋۇجياچۈ شەھىرى'
      },
      659005: {
        659005: '北屯市'
      },
      659006: {
        659006: 'باشئەگىم شەھىرى'
      },
      659007: {
        659007: '双河市'
      },
      659008: {
        659008: 'كۆكدالا شەھىرى'
      },
      659009: {
        659009: '昆玉市'
      },
      659010: {
        659010: '胡杨河市'
      },
      659011: {
        659011: '新星市'
      }
      
    };
  
    var WINDOW = typeof window !== 'undefined' ? window : {};
    var NAMESPACE = 'distpicker';
    var EVENT_CHANGE = 'change';
  
    var DEFAULT_CODE = 100000;
    var PROVINCE = 'province';
    var CITY = 'city';
    var DISTRICT = 'district';
    var Distpicker = /*#__PURE__*/function () {
      function Distpicker(element, options) {
        _classCallCheck(this, Distpicker);
        this.$element = $(element);
        this.options = $.extend({}, DEFAULTS, $.isPlainObject(options) && options);
        this.placeholders = $.extend({}, DEFAULTS);
        this.ready = false;
        this.init();
      }
      _createClass(Distpicker, [{
        key: "init",
        value: function init() {
          var _this = this;
          var options = this.options;
          var $selects = this.$element.find('select');
          var length = $selects.length;
          var data = {};
          $selects.each(function (i, select) {
            return $.extend(data, $(select).data());
          });
          $.each([PROVINCE, CITY, DISTRICT], function (i, type) {
            if (data[type]) {
              options[type] = data[type];
              _this["$".concat(type)] = $selects.filter("[data-".concat(type, "]"));
            } else {
              _this["$".concat(type)] = length > i ? $selects.eq(i) : null;
            }
          });
          this.bind();
  
          // Reset all the selects (after event binding)
          this.reset();
          this.ready = true;
        }
      }, {
        key: "bind",
        value: function bind() {
          var _this2 = this;
          if (this.$province) {
            this.$province.on(EVENT_CHANGE, this.onChangeProvince = $.proxy(function () {
              _this2.output(CITY);
              _this2.output(DISTRICT, true);
            }, this));
          }
          if (this.$city) {
            this.$city.on(EVENT_CHANGE, this.onChangeCity = $.proxy(function () {
              return _this2.output(DISTRICT, true);
            }, this));
          }
        }
      }, {
        key: "unbind",
        value: function unbind() {
          if (this.$province) {
            this.$province.off(EVENT_CHANGE, this.onChangeProvince);
          }
          if (this.$city) {
            this.$city.off(EVENT_CHANGE, this.onChangeCity);
          }
        }
      }, {
        key: "output",
        value: function output(type) {
          var triggerEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
          var options = this.options,
            placeholders = this.placeholders;
          var $select = this["$".concat(type)];
          if (!$select || !$select.length) {
            return;
          }
          var code;
          switch (type) {
            case PROVINCE:
              code = DEFAULT_CODE;
              break;
            case CITY:
              code = this.$province && (this.$province.find(':selected').data('code') || '');
              break;
            case DISTRICT:
              code = this.$city && (this.$city.find(':selected').data('code') || '');
              break;
          }
          var districts = this.getDistricts(code);
          var value = options[type];
          var data = [];
          var matched = false;
          if ($.isPlainObject(districts)) {
            $.each(districts, function (i, name) {
              var selected = name === value || i === String(value);
              if (selected) {
                matched = true;
              }
              data.push({
                name: name,
                selected: selected,
                code: i,
                value: options.valueType === 'name' ? name : i
              });
            });
          }
          if (!matched) {
            var autoselect = options.autoselect || options.autoSelect;
            if (data.length && (type === PROVINCE && autoselect > 0 || type === CITY && autoselect > 1 || type === DISTRICT && autoselect > 2)) {
              data[0].selected = true;
            }
  
            // Save the unmatched value as a placeholder at the first output
            if (!this.ready && value) {
              placeholders[type] = value;
            }
          }
  
          // Add placeholder option
          if (options.placeholder) {
            data.unshift({
              code: '',
              name: placeholders[type],
              value: '',
              selected: false
            });
          }
          if (data.length) {
            $select.html(this.getList(data));
          } else {
            $select.empty();
          }
          if (triggerEvent) {
            $select.trigger(EVENT_CHANGE);
          }
        }
  
        // eslint-disable-next-line class-methods-use-this
      }, {
        key: "getList",
        value: function getList(data) {
          var list = [];
          $.each(data, function (i, n) {
            var attrs = ["data-code=\"".concat(n.code, "\""), "data-text=\"".concat(n.name, "\""), "value=\"".concat(n.value, "\"")];
            if (n.selected) {
              attrs.push('selected');
            }
            list.push("<option ".concat(attrs.join(' '), ">").concat(n.name, "</option>"));
          });
          return list.join('');
        }
  
        // eslint-disable-next-line class-methods-use-this
      }, {
        key: "getDistricts",
        value: function getDistricts() {
          var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_CODE;
          return DISTRICTS[code] || null;
        }
      }, {
        key: "reset",
        value: function reset(deep) {
          if (!deep) {
            this.output(PROVINCE);
            this.output(CITY);
            this.output(DISTRICT);
          } else if (this.$province) {
            this.$province.find(':first').prop('selected', true).end().trigger(EVENT_CHANGE);
          }
        }
      }, {
        key: "destroy",
        value: function destroy() {
          this.unbind();
        }
      }], [{
        key: "setDefaults",
        value: function setDefaults(options) {
          $.extend(DEFAULTS, $.isPlainObject(options) && options);
        }
      }]);
      return Distpicker;
    }();
  
    if ($.fn) {
      var AnotherDistpicker = $.fn.distpicker;
      $.fn.distpicker = function jQueryDistpicker(option) {
        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
          args[_key - 1] = arguments[_key];
        }
        var result;
        this.each(function (i, element) {
          var $element = $(element);
          var isDestroy = option === 'destroy';
          var distpicker = $element.data(NAMESPACE);
          if (!distpicker) {
            if (isDestroy) {
              return;
            }
            var options = $.extend({}, $element.data(), $.isPlainObject(option) && option);
            distpicker = new Distpicker(element, options);
            $element.data(NAMESPACE, distpicker);
          }
          if (typeof option === 'string') {
            var fn = distpicker[option];
            if ($.isFunction(fn)) {
              result = fn.apply(distpicker, args);
              if (isDestroy) {
                $element.removeData(NAMESPACE);
              }
            }
          }
        });
        return typeof result === 'undefined' ? this : result;
      };
      $.fn.distpicker.Constructor = Distpicker;
      $.fn.distpicker.setDefaults = Distpicker.setDefaults;
      $.fn.distpicker.noConflict = function noConflict() {
        $.fn.distpicker = AnotherDistpicker;
        return this;
      };
    }
    if (WINDOW.document) {
      $(function () {
        $("[data-toggle=\"".concat(NAMESPACE, "\"]")).distpicker();
      });
    }
  
  }));